import os
import re
import argparse
import sys

def rename_numeric_files(directory, start_index):
    # 获取目录下所有纯数字文件名的文件
    files = []
    for fname in os.listdir(directory):
        fpath = os.path.join(directory, fname)
        if os.path.isfile(fpath):
            name, ext = os.path.splitext(fname)
            if re.fullmatch(r"\d+", name):  # 文件名必须是纯数字
                files.append((int(name), fname))  # 保存原始数字和文件名

    # 如果没有符合条件的文件，直接返回
    if not files:
        print("没有找到符合条件的文件。")
        return

    # 按原文件名的数字部分排序
    files.sort(key=lambda x: x[0])

    # 批量重命名
    for i, (_, old_name) in enumerate(files, start=start_index):
        _, ext = os.path.splitext(old_name)
        new_name = f"{i:05d}{ext}"  # 从 start_index 开始，保留后缀
        old_path = os.path.join(directory, old_name)
        new_path = os.path.join(directory, new_name)
        os.rename(old_path, new_path)
        print(f"{old_name} -> {new_name}")


if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="批量重命名目录下纯数字文件名的文件")
    parser.add_argument("--path", type=str, required=True, help="需要处理的目录路径")
    parser.add_argument("--start", type=int, default=0, help="起始下标（默认 0）")

    args = parser.parse_args()

    directory = args.path
    start_index = args.start

    # 检查目录是否存在
    if not os.path.isdir(directory):
        print(f"错误: 输入的目录不存在: {directory}")
        sys.exit(1)

    rename_numeric_files(directory, start_index)
